..:: Menu ::.. ..:: Lekcja 4: Podstawy Object Pascala część: 5 ::.. ..::Info i Reklamy::..

Rzutowanie

W poleceniu MessageBox trzeba podawać kilka parametrów. W przypadku drugiego i trzeciego parametru ma być to tekst, który zostanie wyświetlony w okienku. Ten tekst musi być typu PChar. Możesz więc napisać tak i będzie dobrze:
var
Tekst, Tytul : PChar;
begin
Tekst := 'Delphi jest fajne!';
Tytul := 'Nie wiem?';
MessageBox(0, Tekst, Tytul, MB_OK);
end.
Tak, będzie dobrze. Dlaczego? Bo zmienne Tekst oraz Tytul są typu PChar. Teraz zamiast typu PChar napisz String:
var
Tekst, Tytul : String;
begin
Tekst := 'Delphi jest fajne!';
Tytul := 'Nie wiem?';
MessageBox(0, Tekst, Tytul, MB_OK);
end.
Takie coś już nie przejdzie. Kompilator wyświetli błąd: [Error] Project1.dpr(21): Incompatible types: 'String' and 'PChar'. Kompilator próbuje Ci powiedzieć: "Co Ty wyprawiasz! Przecież typy PChar i typ String to dwie różne rzeczy!". Częściowo ma racje, ale to tylko głupia maszyna i da się ją oszukać. Do tego właśnie służy rzutowanie. Polega to na oszukaniu kompilatora. On "myśli", że jest to typ PChar, a ty stosujesz typ String:
var
Tekst, Tytul : String;
begin
Tekst := 'Delphi jest fajne!';
Tytul := 'Nie wiem?';
MessageBox(0, PChar(Tekst), PChar(Tytul), MB_OK);
end.
Jest to rzutowanie typu String na typ PChar. Kompilacja się powiedzie i wszystko będzie dobrze. Fajnie, nie? Ale takie coś przejdzie tylko do czasu. Bo takie coś już nie wyjdzie:
var
Licznik : Integer;

begin
Licznik := 1;
MessageBox(0, PChar(Licznik), '', MB_OK);
end.
Fachowca by powiedział: "To oczywiste. Przecież typy Integer i PChar zapisane są w odrębnych komórkach pamięci i bleblelble". Ktoś jednak pomyślał i stworzył:

Konwersja

Konwersja polega na wykorzystaniu gotowych poleceń do zmiany typów. Jeżeli np. typ Integer chcesz przedstawić w postaci tekstu ( String ) stosujesz polecenie IntToStr. Zaraz przetestujemy to w praktyce. Żeby użyć tego polecenia do listu modułów uses musisz dodać moduł SysUtils. Gotowe? A, wiesz co? Dodaj jeszcze moduł Dialogs. Powinno to wyglądać tak:
uses
Windows,
SysUtils, { <-- ten moduł jest konieczny, aby zastosować konwersje }
Dialogs; { <-- ten zawiera jedno polecenie - ShowMessage }
Moduł Dialogs zawiera polecenie ShowMessage, którego będziemy używali. Jak łatwo się domyśleć polecenie to wyświetla w oknie tekst ( to taka odmiana polecenia MessageBox ). Wpisz taki tekst do programu ( komentarze możesz oczywiście pominąć ):
var
Data : TDateTime; { nowy typ - przechowuje datę }
Rozdzial : Integer; { znany już typ Integer }
Imie : String; { również znany typ String }
begin
Data := Now; { przypisuje zmiennej aktualną datę }
Rozdzial := 4;
Imie := 'Komputer';
ShowMessage('Cześć, mam na imię ' + Imie + ', a Ty właśnie czytasz ' + IntToStr(Rozdzial) + ' rozdział kursu Delphi! Dzisiaj jest: ' + DateToStr(Data));
end.
Hohhoho. To coś trudniejszego, ale jakże przydatne w programowaniu. Zacznijmy od początku. Polecenie ShowMessage ma tylko jeden parametr - jest nim tekst, który ma być wyświetlony w okienku. Tekst ten ma być typu String. Operator + służy do połączenia odpowiednich części ( zmiennych ). Po prostu gdy chcesz w dane miejsce wstawić wartość zmiennej to kończysz tekst stawiając apostrof, następnie znak + mówiący o podłączeniu zmiennej. Później wpisujesz zmienną, która ma być w to miejsce wstawiona. W powyższym wypadku jeżeli będziesz chciał wstawić zmienną, która nie jest typu String trzeba będzie zastosować konwersje. Program możesz uruchomić i sprawdzić jak działa.
Oto inne polecenia konwertujące typy:
IntToStr - konwertuje zmienna "Integer" na "String"
StrToInt - "String" na "Integer"
StrPas - "PChar" na "String"
StrPCopy - "String" na "PChar"
TimeToStr - zmienna "Time" na "String"
DateToStr - zmienna "Date" na "String"
StrToDate - "String" na "Date"
StrToTime - "String" na "Time"
CurrToStr - "Currency" ( zmiennoprzecinkowy ) na "String"
StrToCurr - "String" na "Currency"
FloatToStr - zmiennoprzecinkowy na "String"

<--- Wstecz | Dalej --->

   
©Copyright by garUs